﻿// -----------------------------------------------------------------------
// <copyright file="ILogger.cs" company="OpenSource">
//     All code is Microsoft Public License (Ms-PL)
// </copyright>
// <history>
// 2013.02      Created     Chris Hand
// </history>
// -----------------------------------------------------------------------
namespace OpenSource.OpenDMS.Common.Logging
{
    /// <summary>
    /// Declares the methods available for logging
    /// </summary>
    public interface ILogger
    {
        /// <summary>
        /// Debug messages should be used for a noisy spew of data that would help figure out specific problems
        /// </summary>
        /// <param name="message">Whatever you want to say</param>
        void Debug(string message);

        /// <summary>
        /// Debug messages should be used for a noisy spew of data that would help figure out specific problems
        /// </summary>
        /// <param name="format">The format of your message, same as String.Format</param>
        /// <param name="args">The values to go into the format</param>
        void Debug(string format, params object[] args);

        /// <summary>
        /// Trace messages should be used to indicate when you have entered or left a section of code
        /// </summary>
        /// <param name="message">Whatever you want to say</param>
        void Trace(string message);

        /// <summary>
        /// Trace messages should be used to indicate when you have entered or left a section of code
        /// </summary>
        /// <param name="format">The format of your message, same as String.Format</param>
        /// <param name="args">The values to go into the format</param>
        void Trace(string format, params object[] args);

        /// <summary>
        /// Info messages provide minor details - the results of specific actions, etc.
        /// </summary>
        /// <param name="message">Whatever you want to say</param>
        void Info(string message);

        /// <summary>
        /// Info messages provide minor details - the results of specific actions, etc.
        /// </summary>
        /// <param name="format">The format of your message, same as String.Format</param>
        /// <param name="args">The values to go into the format</param>
        void Info(string format, params object[] args);

        /// <summary>
        /// Should only be used to indicate that the app is about to crash hard.
        /// </summary>
        /// <param name="message">Whatever you want to say</param>
        void Fatal(string message);

        /// <summary>
        /// Should only be used to indicate that the app is about to crash hard.
        /// </summary>
        /// <param name="format">The format of your message, same as String.Format</param>
        /// <param name="args">The values to go into the format</param>
        void Fatal(string format, params object[] args);

        /// <summary>
        /// Places where we need to come back and fix something
        /// </summary>
        /// <param name="message">Helpful information</param>
        void TODO(string message);
    }
}

